package 代码随想录.数组.螺旋矩阵;

class Solution {
    public int[][] generateMatrix(int n) {
        int[][] nums = new int[n][n];
        int startX = 0, startY = 0; //每一圈的起始点
        int offset = 1; 
        int count = 1; //矩阵中需要填写的数字
        int loop = 1; //记录当前的圈数
        int i,j; // j代表列 ，i代表行

        while(loop <= n/2) {

            //顶部
            //左闭又开，所有判断循环结束时,j不能等于n-offset
            for(j = startY; j < n-offset; j++) {
                nums[startX][j] = count++;
            }

            //右列
            //左闭又开，所以判断循环结束时，i不能等于n-offset
            for(i = startX; i < n-offset; i++) {
                nums[i][j] = count++;
            }

            //底部
            //左闭又开，所以判断循环结束时，j!=startY
            for(; j > startY; j--) {
                nums[i][j] = count++;
            }

            //左列
            //左闭又开1,所以判断循环结束时， i!=startX
            for(; i > startX; i--) {
                nums[i][j] = count++;
            }
            startX++;
            startY++;
            offset++;
            loop++;
        }// while()
        if(n%2 == 1) { // n为奇数时，单独处理矩阵中心的值
            nums[startX][startY] = count;
        }// if()
        return nums;
    }// generateMatrix()
    public static void main(String[] args) {
        
    }    
}
